
//#ifdef a
void Swap(int* left, int* right) {
	int temp = *left;
	*left = *right;
	*right = temp;
	return;
}
//升序(最小值放前面)
void SelectSort1(int* arr, int size) {
	//排size - 1 次
	int i = 1;
	for (int j = 0; j < size - 1; j++) {
		int min_pos = j;
		for (i = j + 1; i < size; i++) {
			if (arr[i] < arr[min_pos])
				min_pos = i;
		}
		if (arr[min_pos] != arr[j])
			Swap(&arr[j], &arr[min_pos]);
	}
	return;
}

//升序(最大值放后面)
void SelectSort2(int* arr, int size) {
	//排size - 1 次
	int i = 1;
	for (int j = 0; j < size - 1; j++) {
		int max_pos = 0;
		for (i = 0; i < size - j; i++) {
			if (arr[i] > arr[max_pos])
				max_pos = i;
		}
		if (arr[max_pos] != arr[i - 1])
			Swap(&arr[i - 1], &arr[max_pos]);
	}
	return;
}

//选择排序优化（大小同时找)
void SelectSort3(int* arr, int size){
	int begin = 0;
	int end = size - 1;
	while (begin < end) {
		int min_pos = begin;
		int max_pos = end;
		int index = begin + 1;
		while (index <= end) {
			if (arr[index] < arr[min_pos])
				min_pos = index;
			if (arr[index] > arr[max_pos])
				max_pos = index;
			index++;
		}
		if (arr[min_pos] != arr[begin])
			Swap(&arr[min_pos], &arr[begin]);
		if (max_pos == begin)
			max_pos = min_pos;
		if (arr[max_pos] != arr[end])
			Swap(&arr[max_pos], &arr[end]);
		begin++;
		end--;
	}
	return;
}
//选择排序-》直接选择排序（不稳定）
void SortPrint(int* arr, int size) {
	for (int i = 0; i < size; i++)
		printf("%d ", arr[i]);
	printf("\n");
}

int main() {
	int arr[] = { 10,9,8,7,6,5,4,3,2,1 };
	int size = sizeof(arr) / sizeof(arr[0]);
	//SelectSort1(arr, size);
	SelectSort2(arr, size);
	SortPrint(arr, size);
	return 0;
}
//#endif
